package com.norman.sorry.core.cards;

import java.util.Collection;
import java.util.Map;

import com.norman.sorry.core.moves.IMove;
import com.norman.sorry.core.pieces.IPiece;
import com.norman.sorry.core.players.IPlayer;
import com.norman.sorry.core.tiles.ILinkedTile;

/**
 * Represents a card that is drawn and provides all the possible moves. This
 * interface requires a few basic methods that are critical to the game.
 * 
 * @author Brian Norman
 * @version 0.0.1 beta
 * @since 0.0.1 beta
 */
public interface ICard {

   /**
    * Returns all the possible moves given the position of all the game pieces.
    * 
    * @param player
    *           the player that drew the card.
    * @param pieces
    *           all the game pieces and what tile they are mapped to.
    * @return all the possible moves.
    */
   public Collection<IMove> getMoves(IPlayer player, Map<IPiece, ILinkedTile> pieces);

}
